/**
 * Clase destinada a guardar objetos de cualquier tipo en ficheros externos.
 */
package tools.objects;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import tools.GUI.PanelGUI;

/**
 *
 * @author Félix Marín Ramírez | felixmurcia@gmail.com
 * @version 1.0
 */
public class GuardarObjeto implements java.io.Serializable {

    /**
     *
     * @param ob Parámetro de tipo Object que es pasado como argumento para ser
     * guardado en un fichero.
     * @throws FileNotFoundException En caso de que no exista el fichero lanzará
     * una excepción.
     * @throws IOException En caso de que no se pueda leer o escribir un fichero
     * lanzará una excepción.
     */
    public void GuardarObjetoEnFichero(Object ob) throws FileNotFoundException, IOException {
        String[] listaFicheros;
        File directorio = new File("ObjetosGuardados");        
        boolean borrado = false;
        
        if (directorio.exists() == false) {
            directorio.mkdir();
        }
        
        listaFicheros = directorio.list();

        File fichero = new File("./ObjetosGuardados/Objeto" + contador(listaFicheros) + ".bin");
        FileOutputStream fos = new FileOutputStream(fichero);
        ObjectOutputStream oos = new ObjectOutputStream(fos);            

            if (fichero.exists()) {
                borrado = fichero.delete();
            }else if (borrado == false) {
                PanelGUI.mensajeError("No se ha podido borrar el antiguo fichero");
            }

            oos.writeObject(ob);
            oos.close();        
    }

    /**
     *
     * @param listaFicheros Lista con los nombres de los ficheros contenidos en
     * el directorio de destino.
     * @return Devuelve el número de ficheros que hay en un directiorio más uno.
     */
    private static int contador(String[] listaFicheros) {
        int contador = 0;
        if (listaFicheros == null) {
            return 0;
        } else {
            for (int i = 0; i < listaFicheros.length; i++) {
                contador++;
            }
            return contador;
        }

    }
}
